/***************************************************************************
 创建者: 华磊
 开始时间: 2018.8.14
 copyright: (C) 华友高科
 修改说明: (每次有修改就添加一条，带有 修改人，修改时间，修改描述)
 example (1) 李文友 2017.5.8 类的具体实现代码编写

 ***************************************************************************
 *  @file x.h
 *  功能:
 *
 *                                                                         *
 ***************************************************************************/
#ifndef TRAJECTORYUDEFINE_H
#define TRAJECTORYUDEFINE_H

//#include "../alLib/Eigen/Dense"
#include <vector>
#include "qvector.h"
#include <kdl/frames.hpp>
#include "AxisDefines.h"
#include "qstring.h"
#include "controllercommondefine.h"
#include "GeneralDefine.h"



//using namespace Eigen;
//using namespace std;

enum ENUM_TIME_AXIS_STATUS
{
    ENUM_TIME_AXIS_ASCEND,
    ENUM_TIME_AXIS_NORMAL,
    ENUM_TIME_AXIS_DESCEND
};

struct TimeAxisParameter
{
    double startRatio;//启动后比例
    double startDuration;//启动过程时间
    double stopDuration;//停止时间
    double slowDownRatio;//降速比例
    double startAcceleration;//加速度
    double stopAcceleration;//减速度

};

///**
// * @brief 码垛点结构体。华磊修改。
// */
//struct PalletPoint
//{
//    int palletNumber; //码垛号
//    int pointType;  	  //点类型0 堆栈点。1 接近点。 2 逃离点。
//    int pointNumber;  //接近点号 或 逃离点号
//    std::vector<int> rowColumnLayer;//行列层
//};

/**
 * @brief The PointPro struct       点信息
 */
//struct PointPro
//{
//    int jointFlag;                  //0:关节;1:笛卡尔;
//    int pointNum;                   //点 编号
//    int groupNum;                   //组 编号
//    int ufValue;                    //用户坐标系 编号
//    int utValue;                    //工具坐标系 编号
//    int recordStatus;                  //在使用用户坐标系，或者是工具坐标系进行坐标系示教的时候（三点法，四点法，六点法），记录该点的示教状态，０代表未示教　　１代表已经示教
//    std::string configString;       //多解 选择;多圈 选择
//    std::vector<int> configInt;     //多解 选择;多圈 选择
//    std::vector<float> positionValue;//关节值 or 笛卡尔值
//    std::vector<float> extPositionValue;//外部轴的值，仅存在关节形式
//};

///**
// * @brief MoveParamater 移动参数
// */
//struct MoveParameter
//{
//    int moveType;			//关节、直线、圆弧
//    int velocityUnit;		//单位　０是百分比　１是mm/s　２是°/s
//    float velocity;			//指令里面的速度值
//    PointPro targetPoint;//hmiAPI_update20161107.h
//    PalletPoint palletPoint;
//    int pointType;//0 普通P点, 1 码垛点, 2　PR寄存器点（华磊修改）
//    int index;				//点的编号pointNum
//    int cntRatio;			//cnt
//    float acc;               // 加速度 类型改为float,单位是百分比
//    int lineNumber;        //行号
//    int wjnt;   //姿态是否控制, 直线或者圆弧时对机械手腕姿态是否进行控制
//    int poseOffset;//0 正常，　１　直接补偿
//    int poseOffsetIndex; //直接补偿PR[]
//    int  toolOffset;//0 正常，　１　直接补偿
//    int toolOffsetIndex; //直接补偿PR[]
//    int incFlag;//0 正常，　１增量运动
//    int evFlag;//附加轴运动标识。
//    int evVelocity;//0-100附加轴速度比例
//    int pathFlag;//路径规划曲线标识

//};




struct RobotCommonParameter
{
    QString fileName;
    QVector<JointAttribute>  jointAttributeVector;
    QVector<JointAttribute>  coordinateAttribute;

    int robotId;
    int robotType;
    double t1RatioLimit;
    double arm_CeaseTime;
    double arm_StopTime;
    double arm_warnSpeedRatio;
    double arm_warnSlowRatio;
//    double agv_CeaseTime;
//    double agv_StopTime;
    int coordinateSize;
    int jointNum;
    int armControlAxisNumber;
    int externalNum;//not used
    int agvAxisNum;
    int virtualAxisNum;
    double deltaTime;
    float targetWaitTime; // unit: s
    float lineMaxSpeed;// unit: mm/s
    float lineMaxAcceleration;// unit: mm/s
    E_VELOCITY_PROFILE_TYPE jointMoveVelocityType;

    float agv_targetWaitTime; // unit: s
    float agv_lineMaxSpeed;// unit: mm/s
    float agv_lineMaxAcceleration;// unit: mm/s
    float agv_rotateMaxSpeed;// unit: mm/s
    float agv_rotateMaxAcceleration;// unit: mm/s
    float agv_emergencyRotateAcceleration;// unit: mm/s
    float agv_emergencyLineAcceleration;// unit: mm/s
    E_VELOCITY_PROFILE_TYPE agv_jointMoveVelocityType;
    float agv_allowLineOffset;//unit is mm
    float agv_allowAngleOffset;//unit is degree
    float agv_allowLineMovingOffset;//unit is mm
    float agv_allowLineMovingOffset_ratio;
    float agv_allowAngleMovingOffset;//unit is degree
    double rotate_eqradius;//unit is mm 用于计算ａｇｖ旋转
    double allowVelFeedbackBiasRatio;

    int isArmMotionOn;
    int isAgvMotionOn;

    QVector<double> gravity;
    bool isCalculateIdealJointTorque;
    int armTpType;
    int maxLineCatshDepth_carvingTp;
    double jogDecartLineRatio;
    double jogDecartRotateRation;

};





#endif // TRAJECTORYUDEFINE_H
